//要求：中序遍历结果数组，根据节点数n获得所有可能的二叉树
//策略：动态规划，dp[i]表示节点数为i时可以获得的所有二叉树节点
public class TreeMaxCounts {
}
class TreeMaxCountsSolution {
    public int numTrees(int n) {
        int[] dp = new int[n+1];
        dp[0] = 1;
        dp[1] = 1;
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                dp[i] += dp[j-1]*dp[i-j];
            }
        }
        return dp[n];
    }
}